package ntd.util.frame.data.bo;

import cn.hutool.db.Entity;
import lombok.Data;
import ntd.util.config.common.bo.ComDictVo;
import ntd.util.config.common.enums.EnumDataType;

import java.util.List;
import java.util.Map;

import static ntd.util.frame.data.tool.ToolMysql.transformLength;
import static ntd.util.frame.data.tool.ToolMysql.transformType;

@Data
public class MetaTableField {

    /** 字段名称 */
    private String name;

    /** 字段类型 */
    private EnumDataType enumDataType;

    /** 字段长度 */
    private Integer length;

    /** 小数点 */
    private Integer point;

    /** 是否必选 */
    private boolean tagNeed;

    /** 默认值 */
    private String defaultVal;

    /** 字段注释 */
    private String memo;

    /** 扩展规则规则 */
    private String extra;

    /** 键 */
    private String key;

    /** 字典列表 */
    private List<ComDictVo> dictList;

    /** 属性类型（映射类型） */
    private int type = 1;

    public static MetaTableField transform(Entity entity) {
        MetaTableField metaTableField = new MetaTableField();
        metaTableField.setName(entity.getStr("column_name"));
        metaTableField.setEnumDataType(transformType(entity.getStr("column_type")));
        metaTableField.setLength(transformLength(entity.getStr("column_type")));
        metaTableField.setTagNeed(entity.getStr("is_nullable").equals("NO"));
        metaTableField.setKey(entity.getStr("column_key"));
        metaTableField.setExtra(entity.getStr("extra"));
        metaTableField.setMemo(entity.getStr("column_comment"));
        return metaTableField;
    }

}
